A computer network is a collection of interconnected computing devices that can exchange data and share resources. In a packet-based network, such as the Internet, the computing devices communicate data by dividing the data into small blocks called packets, which are individually routed across the network from a source device to a destination device. The destination device extracts the data from the packets and assembles the data into its original form. Dividing the data into packets enables the source device to resend only those individual packets that may be lost during transmission.
Devices within the network, often referred to as routers, maintain tables of routing information that describe available routes through the network. A “route” can generally be defined as a unit of information that defines a path between two locations on the network. Upon receiving an incoming data packet, the router examines header information within the packet to identify the destination for the packet. Based on the header information, the router accesses the routing table, selects an appropriate route for the packet and forwards the packet accordingly.
Configuration information for a particular router is typically stored in a configuration database associated with the router. This configuration information may include, by way of example and not limitation, information relating to the configuration of protocols, firewalls, interfaces, the chassis, system parameters, and information relating to accounting, routing policies, and forwarding options. The configuration database can be accessed and manipulated by various entities, such as human users and automated configuration scripts or other programs that manipulate the configuration database without human intervention.
The configuration information that is in effect at any given time is referred to as the current configuration and resides on the router. Users and configuration scripts or programs can modify the configuration information, but, in a commit-based database model, any modifications only become effective when they are committed via a commit operation. This commit-based approach offers some degree of protection from unintended modifications to the configuration information.
Problems may arise when multiple entities attempt to change the configuration without adequate coordination. When only human users try to edit the configuration database at the same time, administrative controls can be used to manage their access. When one or more of the contending entities is an automated script or program, however, coordination may be significantly more difficult to implement because human users are often unaware of the activities of the automated script or program. A lack of adequate coordination can result in a misconfigured system.
Some conventional implementations use a “commit-less model,” i.e., a model in which changes to the configuration database are immediate and need not be committed. Because changes take effect immediately, these commit-less implementations are not substantially affected by scripted configuration, thus avoiding some misconfiguration problems. This approach, however, does not offer any sort of multi user access, and the ability to manipulate the router configuration in an automated manner is significantly decreased. For example, automated scripts and programs cannot modify the configuration information if a human user is currently editing the configuration.